/*
 * @Author: 严晗 823841034@qq.com
 * @Date: 2023-10-10 20:34:08
 * @LastEditors: 严晗 823841034@qq.com
 * @LastEditTime: 2024-03-02 09:54:11
 * @FilePath: /yike-admin/Users/yanhan/vite-project/src/axios.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import axios from 'axios'
import { toast } from '~/composables/utils'
import { getToken, removeToken } from '~/composables/auth'
import { router } from './router'

const instance = axios.create({
	baseURL: '/api',
})

// 添加请求拦截器
instance.interceptors.request.use(
	function (config) {
		// 在发送请求之前做些什么
		const token = getToken()
		if (token) {
			config.headers['Authorization'] = 'Bearer ' + token
		}

		return config
	},
	function (error) {
		// 对请求错误做些什么
		return Promise.reject(error)
	}
)

// 添加响应拦截器
instance.interceptors.response.use(
	function (response) {
		
		// 处理文件下载
		const filename = response.headers['content-disposition']
    if (filename) {
      const blob = new Blob([response.data])
      var downloadElement = document.createElement('a')
      var href = window.URL.createObjectURL(blob)
      downloadElement.href = href
      downloadElement.download = decodeURIComponent(
        filename.split('filename=')[1]
      )
      document.body.appendChild(downloadElement)
      downloadElement.click()
      document.body.removeChild(downloadElement)
      window.URL.revokeObjectURL(href)
    }

		if (response.data.code == 1) {
			// 对响应错误做点什么
			toast(response.data.msg || '请求失败', 'error')
			return Promise.reject(response)
		} else {
			// 对响应数据做点什么
			return response
		}
	},
	function (error) {
		// 处理 401 请求
		if (error.response.data.code === 401) {
			// 删除token
			removeToken()
			// token 失效，重新登录
			router.push('/login')
			toast('重新登录')
		} else {
			// 对响应错误做点什么
			toast(error.response.data.msg || '请求失败', 'error')
		}

		return Promise.reject(error)
	}
)

export default instance
